using System;

// 定义接口A
public interface A
{
    double area();
}

// 定义接口B
public interface B
{
    void setColor(string c);
}

// 定义接口C，继承接口A和B
public interface C : A, B
{
    void volume();
}

// 定义圆柱体类Cylinder，实现接口C
public class Cylinder : C
{
    // 成员变量
    private double radius; // 底圆半径
    private double height; // 圆柱体的高
    private string color;  // 颜色
    
    // 构造函数
    public Cylinder(double radius, double height, string color)
    {
        this.radius = radius;
        this.height = height;
        this.color = color;
    }
    
    // 实现接口A的area()方法，计算圆柱体的表面积
    public double area()
    {
        // 圆柱体表面积 = 2πr² + 2πrh = 2πr(r + h)
        return 2 * Math.PI * radius * (radius + height);
    }
    
    // 实现接口B的setColor()方法
    public void setColor(string c)
    {
        this.color = c;
    }
    
    // 实现接口C的volume()方法，计算并输出圆柱体的体积
    public void volume()
    {
        // 圆柱体体积 = πr²h
        double vol = Math.PI * radius * radius * height;
        Console.WriteLine($"圆柱体的体积: {vol:F2}");
    }
    
    // 获取和设置属性的方法
    public double Radius
    {
        get { return radius; }
        set { radius = value; }
    }
    
    public double Height
    {
        get { return height; }
        set { height = value; }
    }
    
    public string Color
    {
        get { return color; }
    }
    
    // 显示圆柱体信息的方法
    public void displayInfo()
    {
        Console.WriteLine($"圆柱体信息:");
        Console.WriteLine($"  底圆半径: {radius}");
        Console.WriteLine($"  圆柱体高: {height}");
        Console.WriteLine($"  颜色: {color}");
        Console.WriteLine($"  表面积: {area():F2}");
        volume(); // 显示体积
    }
}

// 主程序类（测试类）
class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("=== 圆柱体类实现接口演示程序 ===");
        Console.WriteLine();
        
        // 创建一个圆柱体对象
        Cylinder cylinder = new Cylinder(5.0, 10.0, "蓝色");
        
        // 显示初始信息
        Console.WriteLine("初始圆柱体信息:");
        cylinder.displayInfo();
        Console.WriteLine();
        
        // 测试setColor方法
        Console.WriteLine("修改颜色后:");
        cylinder.setColor("红色");
        Console.WriteLine($"圆柱体的新颜色: {cylinder.Color}");
        Console.WriteLine();
        
        // 测试接口方法的直接调用
        Console.WriteLine("直接调用接口方法:");
        Console.WriteLine($"通过接口A调用area()方法: 表面积 = {cylinder.area():F2}");
        Console.Write("通过接口C调用volume()方法: ");
        cylinder.volume();
        
        // 创建新的圆柱体进行测试
        Console.WriteLine();
        Console.WriteLine("创建新的圆柱体对象:");
        Cylinder cylinder2 = new Cylinder(3.5, 7.2, "绿色");
        cylinder2.displayInfo();
        
        Console.WriteLine();
        Console.WriteLine("按任意键退出...");
        Console.ReadKey();
    }
}